﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using FastFood.Business.Entities;
using FastFood.Business.Entities.Tipos;
using FastFood.Business.Logic;
using FastFood.Windows.Helpers;

namespace FastFood.Windows.Forms.Reportes
{
    public partial class CwfCompras : UserControl
    {
        public CwfCompras()
        {
            InitializeComponent();
        }

        private void CwfCompras_Load(object sender, EventArgs e)
        {
            dtpDesdeT.Value = DateTime.Now.AddMonths(-1);
            dtpHastaT.Value = DateTime.Now.AddMonths(1);
            dtpDesdeG.Value = DateTime.Now.AddMonths(-3);
            dtpHastaG.Value = DateTime.Now.AddMonths(3);
            txtSerie.Clear();
            txtNumero.Clear();

            CargarProveedores();
            CargarEmpledos();
            CargarDocumentos();
            CargarEstados();
            CargarInsumos();
        }

        private void btnMostrarT_Click(object sender, EventArgs e)
        {
            int? proveedorID, empleadoID, documento, numero;
            DateTime desde, hasta;
            string serie, estado;

            desde = dtpDesdeT.Value;
            hasta = dtpHastaT.Value;

            if (cmbProveedor.SelectedIndex <= 0) proveedorID = (int?)null;
            else proveedorID = Convert.ToInt32(cmbProveedor.SelectedValue);

            if (cmbPersonal.SelectedIndex <= 0) empleadoID = (int?)null;
            else empleadoID = Convert.ToInt32(cmbPersonal.SelectedValue);

            if (cmbDocumento.SelectedIndex <= 0) documento = (int?)null;
            else documento = Convert.ToInt32(cmbDocumento.SelectedIndex) - 1;

            serie = txtSerie.Text;

            if (string.IsNullOrEmpty(txtNumero.Text)) numero = (int?)null;
            else numero = Convert.ToInt32(txtNumero.Text);

            if (cmbEstado.SelectedIndex <= 0) estado = string.Empty;
            else estado = cmbEstado.SelectedValue.ToString();

            try
            {
                reporteComprasTableAdapter.Fill(jCNDataSet.ReporteCompras, desde, hasta, proveedorID, documento, serie, numero, empleadoID, estado);
                rvwTextual.RefreshReport();
            }
            catch (Exception) { }
        }

        private void btnGenerarG_Click(object sender, EventArgs e)
        {
            int? proveedorID, insumoID;
            DateTime desde, hasta;

            desde = dtpDesdeG.Value;
            hasta = dtpHastaG.Value;

            if (cmbProveedorG.SelectedIndex <= 0) proveedorID = (int?)null;
            else proveedorID = Convert.ToInt32(cmbProveedorG.SelectedValue);

            if (cmbInsumo.SelectedIndex <= 0) insumoID = (int?)null;
            else insumoID = Convert.ToInt32(cmbInsumo.SelectedValue);

            try
            {
                reporteGraficoComprasTableAdapter.Fill(jCNDataSet.ReporteGraficoCompras, desde, hasta, proveedorID, insumoID);
                rvwGrafico.RefreshReport();
            }
            catch (Exception) { }
        }

        private void CargarProveedores()
        {
            try
            {
                var proveedores = ProveedoresManager.Instancia.Listar();
                proveedores.Insert(0, new Proveedores());
                
                cmbProveedor.ValueMember = "proveedorID";
                cmbProveedor.DisplayMember = "razonSocial";
                cmbProveedor.DataSource = proveedores;

                cmbProveedorG.ValueMember = "proveedorID";
                cmbProveedorG.DisplayMember = "razonSocial";
                cmbProveedorG.DataSource = proveedores;
            }
            catch (Exception) { }
        }

        private void CargarEmpledos()
        {
            try
            {
                var personalCn = new PersonalCn();
                var empleados = personalCn.listarPersonal();
                empleados.Insert(0, new Personal());
                cmbPersonal.ValueMember = "personalID";
                cmbPersonal.DisplayMember = "nombreCompleto";
                cmbPersonal.DataSource = empleados;
            }
            catch (Exception) { }
        }

        private void CargarDocumentos()
        {
            var documentos = Enum.GetNames(typeof(TipoDocumento)).ToList();
            documentos.Insert(0, string.Empty);
            cmbDocumento.DataSource = documentos;
        }

        private void CargarEstados()
        {
            var estados = new List<Listado>();
            estados.Add(new Listado { Display = string.Empty, Value = "0" });

            var names = Enum.GetNames(typeof(TipoEstado));
            var values = Enum.GetNames(typeof(TipoEstado));

            for (int i = 0; i < names.Length; i++)
            {
                estados.Add(new Listado { Display = names[i], Value = values[i] });
            }

            cmbEstado.DataSource = estados;
            cmbEstado.ValueMember = "Value";
            cmbEstado.DisplayMember = "Display";
        }

        private void CargarInsumos()
        {
            try
            {
                var insumos = InsumosManager.Instancia.Listar();
                insumos.Insert(0, new Insumos());
                cmbInsumo.DataSource = insumos;
                cmbInsumo.ValueMember = "insumoID";
                cmbInsumo.DisplayMember = "nombre";
            }
            catch (Exception) { }
        }
    }
}
